package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IZtcConfigDAO;
import org.jsola.hr.dto.ZtcConfigAddDTO;
import org.jsola.hr.dto.ZtcConfigUpdateDTO;
import org.jsola.hr.dto.syncSocDTO.QdAttritionCheckDTO;
import org.jsola.hr.dto.syncSocDTO.QdEmploymentRegistrationUnit;
import org.jsola.hr.dto.syncSocDTO.QdIncrementCheckDTO;
import org.jsola.hr.dto.syncSocDTO.ZtcAccessTokenDTO;
import org.jsola.hr.entity.ZtcConfigDO;
import org.jsola.hr.query.ZtcConfigQuery;
import org.jsola.hr.vo.ZtcConfigListVO;
import org.jsola.hr.vo.ZtcConfigVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 政企直通车配置
 *
 * @author zhr
 */
public interface IZtcConfigService extends IService<IZtcConfigDAO, ZtcConfigDO> {

    /**
     * 新增政企直通车配置
     *
     * @param ztcConfigAddDTO 新增政企直通车配置DTO
     * @param tokenUser       当前用户
     * @return 政企直通车配置详情信息
     */
    ZtcConfigVO save(ZtcConfigAddDTO ztcConfigAddDTO, TokenUser tokenUser);

    /**
     * 修改政企直通车配置
     *
     * @param ztcConfigUpdateDTO 修改政企直通车配置DTO
     * @param tokenUser          当前用户
     * @return 更新数量
     */
    int update(ZtcConfigUpdateDTO ztcConfigUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除政企直通车配置，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser    当前用户
     * @param ztcConfigIds 政企直通车配置id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... ztcConfigIds);

    /**
     * 根据政企直通车配置id查找
     *
     * @param ztcConfigId 政企直通车配置id
     * @param siteId      所属站点id
     * @return 政企直通车配置详情信息
     */
    ZtcConfigVO selectById(String ztcConfigId, String siteId);

    /**
     * 查询政企直通车配置
     *
     * @param ztcConfigQuery 查询条件
     * @param siteId         所属站点id
     * @return 政企直通车配置列表信息
     */
    List<ZtcConfigListVO> select(ZtcConfigQuery ztcConfigQuery, String siteId);

    /**
     * 查询政企直通车配置记录数
     *
     * @param ztcConfigQuery 查询条件
     * @param siteId         所属站点id
     * @return 政企直通车配置记录数
     */
    int selectCount(ZtcConfigQuery ztcConfigQuery, String siteId);

    /**
     * 分页查询政企直通车配置
     *
     * @param ztcConfigQuery 查询条件
     * @param siteId         所属站点id
     * @return 政企直通车配置列表信息
     */
    Page<ZtcConfigListVO> selectPage(ZtcConfigQuery ztcConfigQuery, String siteId);


    /**
     * 根据政企直通车配置id查找
     *
     * @param ztcConfigId 政企直通车配置id
     * @param siteId      所属站点id
     * @return 政企直通车配置
     */
    ZtcConfigDO selectDOById(String ztcConfigId, String siteId);

    /**
     * 查询政企直通车配置
     *
     * @param ztcConfigQuery 查询条件
     * @param siteId         所属站点id
     * @return 政企直通车配置列表
     */
    List<ZtcConfigDO> selectDO(ZtcConfigQuery ztcConfigQuery, String siteId);

    /**
     * 控制台查询所有租户配置的政企直通车配置
     *
     * @param ztcConfigQuery 查询参数
     * @param tokenUser      当前用户
     * @return 配置信息
     */
    Page<ZtcConfigListVO> selectPageConfig(ZtcConfigQuery ztcConfigQuery, TokenUser tokenUser);

    /**
     * 查询用工单位需不需要输入直通车密码
     *
     * @param companyId 公司Id
     * @return bool
     */
    boolean ztcAccessTokenExist(String companyId);

    /**
     * 根据账号获取AccessToken 并存入缓存
     *
     * @param ztcAccessTokenDTO 保存参数
     * @return bool
     */
    void saveCacheAccessToken(ZtcAccessTokenDTO ztcAccessTokenDTO);

    /**
     * 根据用工单位Id 查询直通车配置
     *
     * @param companyId 公司Id
     * @return 配置信息
     */
    ZtcConfigDO selectByCompanyId(String companyId);

    /**
     * 校验一下增员的这批人
     *
     * @param ztcAccessTokenDTO 增员参数
     * @param tokenUser         当前用户
     * @return 校验结果
     */
    List<QdIncrementCheckDTO> checkEmpQdWebSite(ZtcAccessTokenDTO ztcAccessTokenDTO, TokenUser tokenUser);

    /**
     * 校验一下减员的这批人
     *
     * @param ztcAccessTokenDTO 减员参数
     * @param tokenUser         当前用户
     * @return 校验结果
     */
    List<QdAttritionCheckDTO> checkDecreaseEmpQdWebSite(ZtcAccessTokenDTO ztcAccessTokenDTO, TokenUser tokenUser);

    /**
     * 获取就业单位列表
     *
     * @param tokenUser 当前用户
     * @param areaId    地区Id
     * @return 就业单位列表
     */
    List<QdEmploymentRegistrationUnit> getEmploymentRegistrationUnit(TokenUser tokenUser, String areaId);

    /**
     * 单个删除
     *
     * @param id 主键
     * @return 删除数量
     */
    int deleteById(String id);

    /**
     * 获取当前登录用户的cookie
     *
     * @param areaId    地区Id
     * @param tokenUser 当前用户
     * @return cookie
     */
    String getWebSiteCookie(String areaId, TokenUser tokenUser);
}


